<!DOCTYPE HTML>
<html>
<head>
<title>foo_httpcontrol readme</title>
<style type="text/css">
	body{ font: 0.75em "Arial", sans-serif; margin: 10px; background-color: #ffffff; max-width: 800px; }
	ul#commands li { margin-bottom: 0.5em; }
	h2 {border-bottom: 1px solid gray}
	h2#warn {color: red; border: 0px;}
	p {text-indent: 2em; }
</style>	
</head>
<body>
<h2>foo_httpcontrol 0.97.15 02 Mar 2014</h2>
<p><a href="http://code.google.com/p/foo-httpcontrol/">http://code.google.com/p/foo-httpcontrol</a></p>

<h2 id="warn">Warning/disclaimer: this software comes without any warranties at all. It is still in the very early development stage, and so on, and so forth, blah-blah-blah.
Component can be very dangerous to your music collection when blindly exposed to Internet without any additional protection. Remember, it is intended for private, non-public use only!</h2>

<p>This <a href="http://foobar2000.org">foobar2000</a> 1.0 component is developed as replacement for Media Player Classic web control interface,
which I used quite a lot, but still didn't like it, as it missed quite a number of features I'd like to have. Also
I felt it's a shame such great player as foobar2000 couldn't be remotely controlled over http nowadays.
So, erm, I went ahead and somehow developed component featuring functions I use by myself on everyday basis.</p>

<p>It provides the following features via http requests:</p>
<ul>
<li>full control of playback, including seekbar</li>
<li>basic playlist support</li>
<li>basic playback queue support</li>
<li>basic media library support</li>
<li>basic file browser functions, including ability to browse Microsoft Network</li>
<li>a few UI customization abilities</li>
</ul>

<p>Default interface template is written using synchronious document model (with basic CSS and JS), 
and has been tested and proved itself working on any modern browser: Opera, Firefox, Chrome, Safari.</p>

<h2>Installation</h2>
<p>Extract foo_httpcontrol.dll to foobar2000 components directory (%APPDATA%\foobar2000\user-components\foo_httpcontrol\). 
Alternatively you can use foobar2000 own installer: foobar2000/Preferences/Components/Install... and point it to foo_httpcontrol zip archive.</p>

<p>Download at least one template (<a href="http://www.hydrogenaudio.org/forums/index.php?showtopic=62218">http://www.hydrogenaudio.org/forums/index.php?showtopic=62218</a>, <a href="http://code.google.com/p/foo-httpcontrol/">http://code.google.com/p/foo-httpcontrol</a>) 
and follow bundled instructions to install it where it belongs.</p>

<p>Start foobar2000 and modify component settings according to your taste in
preferences (foobar2000/Preferences/Tools/HTTP Control). Nothing prevents you from
customizing any template you are using, or even writing your very own one.</p>
<p>Default configuration allows you to access  foo_httpcontrol at least on
<a href="http://127.0.0.1:8888/">http://127.0.0.1:8888/</a> address.</p>

<p>Well, that's all, try to have fun! Just in case: I'm preventively sorry for all possible frustration.</p>

<h2>Preferences</h2>
<img src="readme.png" alt="foo_httpcontrol preferences">
<ol>
	<li>Specifies the IP address and port used for listening to incoming connections. Both IP address and port must be valid, make sure specified port is not used by another program.</li>
	<li>Check or uncheck to enable or disable listening for incoming connections.</li>
	<li>Opens component page in default browser. Button is inactive if server/listener isn't started.</li>
	<li>Limit access to component by setting the allowed IP address. Connections initiated from other addresses will be discarded. Setting this to 0.0.0.0 allows all connections.</li>
	<li>Limit access to component by defining a login/password pair. Untick to disable passwords.</li>
	<li>Built-in file browser can be limited to certain paths of your file system. It is useful to simplify the browsing process or hide your secret files from prying eyes. For example, setting Allowed paths to d:\music|c:\temp\music|e:\ permits browsing only in these three file system branches.</li>
	<li>You can specify additional file extensions to be treated as playable files by built-in file browser. It is required for opening archives containing playable files.</li>
	<li>Removes all files which foobar2000 core considers unplayable from built-in file browser.</li>
	<li>Specifies path where component will look for template files. Pressing Open opens specified or default directory in Explorer. If not sure, leave it blank. </li>
	<li>Enables gzip compression of component output. Enabling it is usually harmless and quite beneficial as component generates a lot of text which is very compressible. Disable if you are using some funky browser and having unexpected problems.</li>
	<li>Enables logging of component access data to foobar2000 console. Useful for debugging etc.</li>
	<li>Adds "Stop after queue" item in Playback menu. It works exactly as it's named, stops playback when end of playback queue is reached.</li>
</ol>
Don't forget to press Apply or your changes won't have any effect until fb2k is restarted.

<h2>Troubleshooting</h2>

<p>Discussion thread (please post all your questions and  suggestions  here):
<a href="http://www.hydrogenaudio.org/forums/index.php?showtopic=62218">http://www.hydrogenaudio.org/forums/index.php?showtopic=62218</a></p>

<h2>Changes history 2014</h2> 
<p>v0.97.15 02 Mar</p>
<ul>
<li>add: Seek command renamed to SeekPercent, old name still works;</li>
<li>add: SeekDelta command renamed to SeekSecondDelta, old name still works;</li>
<li>add: SeekSecond command, seek with a second precision;</li>
</ul>

<p>v0.97.14 02 Mar</p>
<ul>
<li>add: Implemented natural sorting (StrCmpLogicalW) in file browser and media library query;</li>
<li>fix: A few fixes discovered by awesome CppCat static analyzer software;</li>
<li>fix: (Probably) got rid of not very rare exception happening in file browser;</li>
</ul>

<h2>Changes history 2013</h2> 
<p>v0.97.13 21 Jan</p>
<ul>
<li>add: Sort command renamed to SortAscending, old name still supported;</li>
<li>add: SortDescending command, essentially the same as SortAscending but sorting result is reversed;</li>
</ul>

<h2>Changes history 2011</h2> 

<p>v0.97.12 14 Aug</p>
<ul>
<li>add: hide password text in Preferences;</li>
<li>fix: http protocol items left out when adding items using Browse cmd. it's now possible to "Add location" too by specifying url in Browse cmd param1;</li>
</ul>

<p>v0.97.11 20 Jul</p>
<ul>
<li>fix: crash on unknown file format requests;</li>
<li>fix: inability to send zero length files;</li>
</ul>

<p>v0.97.9 04 Jul</p>
<ul>
<li>fix: FormatTitles command results are now proper for now playing context;</li>
</ul>

<p>v0.97.8 14 May</p>
<ul>
<li>add: removed deprecated commands VolumeUp, VolumeDown, DequeueTrack;</li>
<li>add: FormatTitles cmd, parses the list of titleformatting strings passed in param1 (multiple values must be separated by |) 
for active playlist item defined in param2 or currently played item if param2 is omitted, and returns the data in json array format.
make sure to pass reference to any filename with json extension in param3, so response has proper the content type.
if param3 is omitted, content type is set to default text/html and might confuse some browsers.<br>
for example, calling<br>
?cmd=FormatTitles&param1=%artist%|%album%|%bitrate%&param2=0&param3=format.json <br>
formats supplied titleformatting strings for active playlist item number 0, resulting in following response:<br>
["Ozric Tentacles","Spirals in Hyperspace","980"]
</li>
<li>add: ability to ignore files with specific extensions in file browser: see "Ignored formats" preferences field;</li>
</ul>

<p>v0.97.7 7 Mar</p>
<ul>
<li>add: albumart_limit_size config key, defines maximum albumart size in bytes to retrieve. default is 0, no limit;</li>
<li>add: albumart_prefer_embedded config key, defines whether to prefer embedded albumart over external. default is 0, prefer external albumart;</li>
<li>add: Sort command, sorts whole active playlist or item list specified in param2, using sort pattern param1;</li>
<li>fix: setting playlist_items_per_page config key to 0 disables playlist retrieve;</li>
<li>fix: SelectionCommand additionally accepts list of items to be processed in param2;</li>
</ul>

<p>v0.97.6 24 Jan</p>
<ul>
<li>add: additional exception detection;</li>
<li>add: removed stripping non-text chars in json responses as most of the 3rd party templates requests have cr/lf's in wrong places;</li>
</ul>

<p>v0.97.5 22 Jan</p>
<ul>
<li>fix: possible crash during media library query;</li>
<li>add: strip non-text chars in json responses;</li>
</ul>

<h2>Changes history 2010</h2> 

<p>v0.97.4 21 Dec</p>
<ul>
<li>add: SetSelection command, selects item list specified in param1 (numbers separated by any delitemeter),
optionally taking param2 as playlist number. empty param1 value removes all selection, if param1 equals to ~, all playlist items will be selected.
example: ?cmd=SetSelection&amp;param1=1,2,3&amp;param2=1 selects items 1,2,3 in playlist 1</li>
<li>add: SelectionCommand command, executes context menu command specified in param1 for currently selected items (don't forget to urlencode param1 value). Note that running playlist-specific context menu commands like Remove, Crop, etc is not possible.
example: ?cmd=SelectionCommand&amp;param1=Playback%20Statistics%2FRating%2F3 sets rating 3 to active playlist selection.</li>
<li>fix: context menu commands are run on full context menu;</li>
<li>fix: removed 'allow fb2k command-line interface' option;</li>
</ul>

<p>v0.97.3 15 Nov</p>
<ul>
<li>add: PlayingCommand command, executes context menu command specified in param1 for currently playing item (don't forget to urlencode param1 value). 
example: ?cmd=PlayingCommand&amp;param1=Playback%20Statistics%2FRating%2F3</li>
<li>fix: Decapitalize stop after queue menu item;</li>
</ul>

<p>v0.97.2 31 Oct</p>
<ul>
<li>fix: CmdLine command doesn't work in fb2k 1.1 and newer;</li>
<li>fix: disabling command-line interface in preferences has no effect;</li>
</ul>

<p>v0.97 24 Sep</p>
<ul>
<li>fix: removed forgotten console debug message;</li>
</ul>

<p>v0.96.16 23 Sep</p>
<ul>
<li>add: pseudo-multithreaded request processing to workaround the new dubious pre- and post- 'speedup' connections of Chrome 7 and IE9;</li>
</ul>

<p>v0.96.15 13 Sep</p>
<ul>
<li>add: \r\n characters escaping in *_JS macros;</li>
<li>fix: wrong compile optimization options;</li>
</ul>

<p>v0.96.14 08 Aug</p>
<ul>
<li>fix: possible buffer overrun in file browser;</li>
<li>add: updated documentation;</li>
</ul>

<p>v0.96.13.1 04 May</p>
<ul>
<li>fix: borked content-type in server responses;</li>
</ul>

<p>v0.96.13 03 May</p>
<ul>
<li>fix: installed templates list shown before user authentification;</li>
<li>fix: removed display of home folder full path in templates list and error pages;</li>
<li>add: autoselect playlist if only one playlist present;</li>
<li>add: SeekDelta command, param1 specifies seek delta seconds (signed integer);</li>
<li>add: VolumeDBDelta command, param1 specifies dB volume level delta defined by signed integer multiplied by 10 (divided by 10 within the component);</li>
<li>add: VolumeDelta command, param1 specifies signed volume delta percentage;</li>
<li>add: VolumeUp VolumeDown commands are deprecated;</li>
</ul>

<p>v0.96.12.1 19 Apr</p>
<ul>
<li>fix: stop after queue affected playlist refreshing on queue operations;</li>
</ul>

<p>v0.96.12 17 Apr</p>
<ul>
<li>add: optional gzip compression (reduces compressible html/css/json traffic 3-5 times). disable in preferences if you're experiencing problems.</li>
<li>add: user specified playable file extensions for file browser. helps to make archives appear playable, for example.</li>
<li>fix: random stuff;</li>
</ul>

<p>v0.96.11 10 Apr</p>
<ul>
<li>fix: more accurate replication of DUI behaviour for Start/Pause commands;</li>
</ul>

<p>v0.96.10 04 Apr</p>
<ul>
<li>fix: crashes on queue operations;</li>
</ul>

<p>v0.96.9 30 Mar</p>
<ul>
<li>fix: added backslash 'escaping' in certain ui macros;</li>
</ul>

<p>v0.96.8 22 Mar</p>
<ul>
<li>fix: crash in certain conditions;</li>
</ul>

<p>v0.96.7 21 Mar</p>
<ul>
<li>fix: wrong handling of multivalue tags in media library query</li>
<li>fix: some fixes and improvements</li>
</ul>

<p>v0.96.6 15 Mar</p>
<ul>
<li>fix: wrong parent in network shares browser</li>
<li>fix: some bugs here and there</li>
</ul>

<p>v0.96.5 22 Feb</p>
<ul>
<li>add: VolumeMuteToggle command</li>
<li>add: VolumeDB command, param1 specifies positive integer dB volume level multiplied by 10 (divided by -10 within the component). accepted value range is 0...665 (0...-66.5 dB), or 1000 for mute (-100 dB)</li>
<li>add: [VOLUME_DB] integer db volume level (multiplied by -10, thus single digit precision)</li>
<li>fix: custom random play command replaced with foobar2000 standard one</li>
</ul>

<p>v0.96.4 23 Jan</p>
<ul>
<li>fix: fixes and improvements</li>
<li>add: FocusOnPlaying command</li>
</ul>

<p>v0.96.3 06 Jan</p>
<ul>
<li>add: [HELPER1X], [HELPER2X], [HELPER3X] macros - xml friendly versions of [HELPERN] macros</li>
</ul>

<p>v0.96.2 05 Jan</p>
<ul>
<li>fix: manual starting/stopping listener thread issues</li>
<li>fix: wrong [ALBUMART] macro url for embedded albumart</li>
<li>add: SAQ command ignored when "Enable stop after queue menu item" preferences option unchecked</li>
</ul>

<h2>Changes history 2009</h2> 

<p>v0.96.1 29 Dec</p>
<ul>
<li>add: [PLAYLIST_IS_UNDO_AVAILABLE] [PLAYLIST_IS_REDO_AVAILABLE] active playlist context macros</li>
<li>add: Redo cmd, reverting changes made by undo, param1 optionally specifies playlist</li>
<li>add: creating undo point prior to enqueue tracks and library query commands</li>
<li>add: removable stop after queue menu item</li>
<li>add: templates config file. see default template config file for syntax</li>
<li>add: fb2k 1.0+ is required</li>
<li>fix: various fixes</li>
</ul>

<h2>Appendix #1</h2>

<p>Bundled foobar2000 icon (c) 2007 Florian Trendelenburg</p>

<p>foo_httpcontrol is developed using:</p>

<ul id="commands">
<li>foobar2000 1.0 SDK<br/>
    Copyright (c) 2001-2009, Peter Pawlowski<br/>
    All rights reserved.<br/>
    <a href="http://foobar2000.org">http://foobar2000.org</a></li>

<li>JNetLib<br/>
    Justin Frankel http://www.cockos.com<br/>
    Joshua Teitelbaum http://www.cryptomail.org</li>

<li>zlib<br/>
    http://www.zlib.net/<br/>
    Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler</li>

<li>priceless inspiration of foo_httpserver sources<br/>
    Erik http://foobar.daychanged.com<br/>
    Jonatan Kronqvist http://fb2k.oxygenite.org</li>

<li>remains of my mental and physical health</li>
</ul>

<h2>Appendix #2</h2>

<p>Command syntax:
    http://&gt;ip&lt;[:&lt;port&gt;]/&lt;?cmd=Command[&amp;param1=param 1[&amp;param2=param 2]][&amp;param3=param 3]&gt;</p>

<p>Supported commands:</p>
<ul id="commands">
<li>Stop playback<br/>
        cmd=Stop<br/></li>

<li>Play or pause playback<br/>
        cmd=PlayOrPause</li>

<li>Start playback in active playlist<br/>
        cmd=Start<br/>
        param1=playlist item starting from 0</li>

<li>Start playback of random item in active playlist<br/>
        cmd=StartRandom</li>

<li>Start playback of previous item in active playlist<br/>
        cmd=StartPrevious</li>

<li>Start playback of next item in active playlist<br/>
        cmd=StartNext</li>

<li>Volume level<br/>
        cmd=Volume
        param1=volume level, 0...100 (%)</li>

<li>Volume level delta<br/>
        cmd=VolumeDelta
        param1=signed volume level delta percentage, -N...N (%)</li>

<li>Volume level dB<br/>
        cmd=VolumeDB
        param1=volume level, 0...665 (0...-66.5 db), or 1000 to mute</li>

<li>Volume level dB delta<br/>
        cmd=VolumeDBDelta
        param1=signed delta, -N...N (-N/10...N/10 db)</li>

<li>Seek playing item by percentage<br/>
        cmd=SeekPercent<br/>
        param1=position, from 0 to 100 (percent)</li>

<li>Seek playing item by seconds<br/>
        cmd=SeekSecond<br/>
        param1=seconds (signed integer)</li>

<li>Seek playing item by delta seconds<br/>
        cmd=SeekSecondDelta<br/>
        param1=seconds (signed integer)</li>

<li>Empty active playlist<br/>
        cmd=EmptyPlaylist</li>

<li>Change playback order<br/>
        cmd=PlaybackOrder<br/>
        param1=order number, from 0 to 7</li>

<li>Delete one or more playlist items<br/>
        cmd=Del<br/>
        param1=numbers separated by any delitemeter<br/>
        param2=optionally specifies playlist</li>

<li>Undo changes made to playlist backed up by restore point<br/>
        cmd=Undo<br/>
        param1=optionally specifies playlist</li>
        
<li>Move one or more active playlist items<br/>
        cmd=Move<br/>
        param1=numbers separated by any delitemeter<br/>
        param2=signed move delta</li>

<li>Set playlist selection<br/>
        cmd=SetSelection<br/>
        param1=numbers separated by any delitemeter, empty to remove selection, ~ to select all<br/>
        param2=optionally specifies playlist</li>

<li>Change stop after current flag<br/>
        cmd=SAC<br/>
        param1=0 or 1</li>

<li>Switch playlist<br/>
        cmd=SwitchPlaylist<br/>
        param1=playlist index, from 0</li>

<li>Switch playlist page<br/>
        cmd=SwitchPlaylistPage;P<br/>
        param1=page index, from 0</li>
        
<li>Set focus to specific item of active playlist<br/>
        cmd=SetFocus<br/>
        param1=item starting from 0</li>

<li>Browse directory<br/>
        cmd=Browse<br/>
        param1=urlencoded path</li>

<li>Enqueue path<br/>
        param2=EnqueueDir</li>

<li>Enqueue path including subdirectories<br/>
        param2=EnqueueDirSubdirs</li>
        
<li>Put active playlist items to playback queue <br/>
        cmd=QueueItems<br/>
        param1=numbers separated by any delitemeter</li>

<li>Remove active playlist items from playback queue <br/>
        cmd=DequeueItems<br/>
        param1=numbers separated by any delitemeter</li>

<li>Search media library<br/>
        cmd=SearchMediaLibrary;Search<br/>
        param1=search query</li>

<li>Query media library<br/>
        cmd=QueryAdvance<br/>
        param1=search query</li>

<li>Query media library<br/>
        cmd=QueryRetrace</li>
        
<li>Skip generating request response<br/>
        param3=NoResponse</li>

<li>Use different template file<br/>
        param3=template.html</li>
        
<li>PlaylistItemsPerPage<br/>
        param1=number of playlist items per page, limited to 16384</li>
        
<li>QueueAlbum<br/>
        param1=item album search starts from (focused item is used if param1 is omitted)</li>

<li>QueueRandomItems<br/>
        param1=item count</li>

<li>FlushQueue</li>
        
<li>Parse<br/>
        param1=string to parse and return</li>

<li>RemovePlaylist<br/>
        param1=playlist index</li>

<li>CreatePlaylist<br/>
        param1=playlist name<br/>
        param2=insertion point index</li>

<li>RenamePlaylist<br/>
        param1=playlist name<br/>
        param2=playlist index</li>

<li>FocusOnPlaying</li>

<li>Update helper macros<br/>
        cmd=RefreshPlayingInfo</li>

<li>Execute foobar2000 with specific command-line parameters<br/>
        cmd=CmdLine<br/>
        param1=parameters</li>

<li>Executes context menu command specified in param1 for currently playing item<br/>
	cmd=PlayingCommand<br/>
	param1=case sensitive context menu path, for example: Playback Statistics/Rating/3<br/>
	don't forget to urlencode param1 value.
</li>

<li>Executes context menu command specified in param1 for currently selected (or specified list of) items of active playlist. Note that running playlist-specific commands like Remove, Crop, etc is not possible.<br/>
	cmd=SelectionCommand<br/>
	param1=case sensitive context menu path, for example: Playback Statistics/Rating/3<br/>
	param2=numbers separated by any delimeter (optional)<br/>
	don't forget to urlencode param1 value.<br/>
</li>

<li>Sorts whole active playlist or its specified items using sort pattern in ascending order<br/>
	cmd=SortAscending (deprecated old name Sort)<br/>
	param1=sort pattern<br/>
	param2=numbers separated by any delimeter (optional)<br/>
	don't forget to urlencode param1 value.<br/>
</li>

<li>Sorts whole active playlist or its specified items using sort pattern in descending order<br/>
	cmd=SortDescending<br/>
	param1=sort pattern<br/>
	param2=numbers separated by any delimeter (optional)<br/>
	don't forget to urlencode param1 value.<br/>
</li>

<li>Tileformats a list of titleformatting string using playing or certain active playlist item and returns result as json array<br/>
	cmd=FormatTitles<br/>
	param1=list of titleformatting strings (separated by |)<br/>
	param2=active playlist item index (optional)<br/>
	param3=file name to guess the resulting content type from, use file.json<br/>
</li>

</ul>
        
<h2>Appendix #3</h2>

<p>Template macro substitutions:</p>
<ul>
<li>[HELPER1]</li>
<li>[HELPER2]</li>
<li>[HELPER3]</li>
<li>[HELPER1X]</li>
<li>[HELPER2X]</li>
<li>[HELPER3X]</li>
<li>[VOLUME]</li>
<li>[VOLUME_DB]</li>
<li>[VOLUME_OPTION]</li>
<li>[PLAYBACK_ORDER]</li>
<li>[PLAYBACK_ORDER_OPTION]</li>
<li>[PLAYLISTS_OPTION]</li>
<li>[SAC]</li>
<li>[SAQ]</li>
<li>[ITEM_PLAYING_POS]</li>
<li>[ITEM_PLAYING_LEN]</li>
<li>[QUEUE_TOTAL_TIME]</li>
<li>[IS_PLAYING]</li>
<li>[IS_PAUSED]</li>
<li>[IS_ENQUEUEING]</li>
<li>[AUTO_REFRESH]</li>
<li>[LAST_ACTION]</li>
<li>[ALBUMART]</li>
<li>[PLAYLIST]</li>
<li>[PLAYLIST_TOTAL_TIME]</li>
<li>[PLAYLIST_ACTIVE]</li>
<li>[PLAYLIST_PLAYING]</li>
<li>[PLAYLIST_PAGE]</li>
<li>[PLAYLIST_PAGES_COUNT]</li>
<li>[PLAYLIST_PAGES]</li>
<li>[PLAYLIST_PAGES_SELECT]</li>
<li>[PLAYLIST_ITEM_FOCUSED]</li>
<li>[PLAYLIST_ITEM_PLAYING]</li>
<li>[PLAYLIST_ITEM_PREV_PLAYED]</li>
<li>[PLAYLIST_ITEMS_COUNT]</li>
<li>[PLAYLIST_ITEMS_PER_PAGE]</li>
<li>[PLAYLIST_PLAYING_ITEMS_COUNT]</li>
<li>[PLAYLIST_IS_UNDO_AVAILABLE] </li>
<li>[PLAYLIST_IS_REDO_AVAILABLE] </li>
<li>[PLAYLIST_JS]</li>
<li>[PLAYLISTS_JS]</li>
<li>[SEARCH_REQUEST]</li>
<li>[QUERY]</li>
<li>[QUERY_JS]</li>
<li>[QUERY_INFO]</li>
<li>[QUERY_INFO_JS]</li>
<li>[PATH]</li>
<li>[PATH_JS]</li>
<li>[PATH_PARENT]</li>
<li>[BROWSER]</li>
<li>[BROWSER_JS]</li>
<li>[STATE_CHANGE]</li>
</ul>

<h2>Appendix 4</h2>

<p>Sample template config file. Config file should be named config and put to template directory root.</p>

<code>
; default template configuration file<br/>
; <br/>
[foo_httpcontrol]<br/>
; base url of template. for example, if template is invoked as http://ip:port/template/, put / here.<br/>
url=/<br/>
; defines formatting of a playlist row using foobar2000 titleformatting.<br/>
playlist_row=&lt;td&gt;%album artist% - %album% - %tracknumber% - %title% - %length%<br/>
; defines formatting of a helper macros using foobar2000 titleformatting.<br/>
helper1=%album artist% - %title%<br/>
helper2=[%title% - ]<br/>
helper3=%codec% %bitrate%kbps %samplerate%Hz %channels%<br/>
; specifies wildcards where we should look for albumart files, separated by |. foobar2000 titleformatting is available there as well.<br/>
albumart=$directory_path(%path%)\folder.jpg|$directory_path(%path%)\*.jpg<br/>
; specifies path of a picture to show when albumart is not found.<br/>
albumart_not_found=default/nocover.jpg<br/>
; specifies path of a picture to show when albumart is requested but not currently available (no playing track).<br/>
albumart_not_available=default/nocover.jpg<br/>
; limits maximum albumart size to download, in bytes. default is 0 - no limit.<br/>
albumart_limit_size=0<br/>
; setting to 1 favors embedded albumart over external. default is 0.<br/>
albumart_prefer_embedded=0<br/>
; controls size of a playlist 'page'. setting to 0 completely disables playlist generation. default is 30.<br/>
playlist_items_per_page=30<br/>
</code>

</body>
</html>